﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GraphAlgorithm
{
	/// <summary>
	/// A véletlent használó gráfszínező algoritmust tartalmazó osztály.
	/// </summary>
	public class RandomColorAlgorithm
	{
		/// <summary>
		/// Az algoritmus eredménye.
		/// </summary>
		public class Result
		{
			public bool IsSucceded;
			public Edge FirstConflict;

			public Result( Edge e )
			{
				FirstConflict = e;
				IsSucceded = false;
			}

			public Result()
			{
				FirstConflict = null;
				IsSucceded = true;				
			}
		}
		/// <summary>
		/// Véletlent használó gráfszínező algoritmus
		/// </summary>
		/// <param name="G">A színezendő gráf</param>
		/// <param name="maxIterations">Az iterációk maximális száma</param>
		/// <returns>Igaz, ha sikerült kiszínezni a Gráfot, hamis, ha nem.</returns>
		public static Result DoColoring( Graph G, int maxIterations )
		{
			G.RandomizeAllVertexColor();

			for( int i = 0; i < maxIterations; i++ )
			{
				Edge edge = G.GetFirstConflict();
				if( edge == null )
				{
					return new Result();
				}
				else
				{
					G.RandomizeVertexColor( edge.Begin );
					G.RandomizeVertexColor( edge.End );
				}
			}

			return new Result(G.GetFirstConflict());
		}
	}
}
